
#include "button.h"


void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
	switch(GPIO_Pin)
	{
		case SW2_Pin :
			line=(line+1)%4;
			break;
		case SW1_Pin:
			value_change(line,0);
			break;
		case Encoder_A_Pin://逆时针则减
			if (!HAL_GPIO_ReadPin(Encoder_A_GPIO_Port, Encoder_A_Pin)){
				if (!HAL_GPIO_ReadPin(Encoder_B_GPIO_Port, Encoder_B_Pin) && (!ifchange) && left){
					b=2;
					right=0;
				}
				else if (!left){
					left++;
				}
			}
			break;
		case Encoder_B_Pin://顺时针则增
			if (!HAL_GPIO_ReadPin(Encoder_B_GPIO_Port, Encoder_B_Pin)){
				if (!HAL_GPIO_ReadPin(Encoder_A_GPIO_Port, Encoder_A_Pin) && (!ifchange) && right){
					b=1;
					left=0;
				}
				else if (!right){
					right++;
				}
			}
			break;
	}
}

void value_change(int line,int ifadd)
{
	switch(line)
	{
		case 0:value=(value+1)%3;break;
		case 1:freq_change(ifadd,step);break;
		case 2:step_change(ifadd);break;
		case 3:ampli_change(ifadd,step);break;
		default:value=(value+1)%3;break;

	}
}

void step_change(int ifadd)
{
	if (ifadd==0){
		if (step==1000000){
			step=1;
		}
		else {
			step=step*10;
		}
	}
	else if (ifadd==1){
		if (step==1){
			step=1000000;
		}
		else {
			step=step/10;
		}
	}

}

void freq_change(int ifadd,int step)
{
	//ifadd=0,增
	if (ifadd==0)
	{
		if (hz==5000000){
			hz=0+step;
		}
		else if ((hz+step)>=5000000)
		{
			hz=5000000;
		}
		else
		{
			hz=hz+step;
		}
	}
	else if (ifadd==1){
		if (hz==0){
			hz=5000000;
		}
		else if (hz<=step){
			hz=0;
		}
		else {
			hz=hz-step;
		}
	}
}

void ampli_change(int ifadd,int step)
{
	//ifadd=0,增
	if (ifadd==0)
	{
		if (ampl==1000){
			ampl=100;
		}
		else if ((ampl+step)>=1000)
		{
			ampl=1000;
		}
		else
		{
			ampl=ampl+step;
		}
	}
	else if (ifadd==1){
		if (ampl==100){
			ampl=1000;
		}
		else if (ampl<=(step+100)){
			ampl=100;
		}
		else {
			ampl=ampl-step;
		}
	}
}
